// const BASE_CHAT_URL = 'http://114.132.83.76:1699/api'

import { uploadCourseCover } from "@/api/classroom";

// const BASE_CHAT_URL = 'http://localhost:1699/api'
const BASE_CHAT_URL = '/oneapi/api'
const codePrompt = (codeContent: string, languageType: string = 'sql', SugNum: number = 3) => {
    return `
**任务描述**
    你是一个智能${languageType}代码补全系统，当用户输入部分${languageType}语句时，根据数据库模式、上下文和${languageType}语法，生成符合逻辑的补全建议。需支持以下功能：\
**核心要求**
1. **语法感知**
    - 根据${languageType}关键词（SELECT, FROM, WHERE等）和语法结构动态推荐后续代码
    - 示例：输入 \`SELECT * FROM users WHERE\` → 推荐 \`id =\`, \`name LIKE\`, \`created_at >\`
    - 支持多表JOIN时的关联字段推荐（如 \`ON orders.user_id = users.id\`）
2. **数据库模式整合**
    - 输入表名时自动显示字段列表（如 \`users.\` → 弹出 \`id\`, \`email\`, \`created_at\`）
    - 支持跨表字段补全（输入 \`SELECT users.\` → 显示当前表字段，输入 \`JOIN\` 后显示关联表字段）
3. **上下文感知**- 根据已输入的WHERE条件排除冲突字段（如已用\`WHERE id = 1\`，后续推荐避免重复）
    - GROUP BY后自动推荐聚合函数（如 \`COUNT()\`, \`SUM()\`）
4. **智能纠错**
    - 检测语法错误并提示修正（如 \`SELCT\` → 建议 \`SELECT\`）- 字段名拼写纠错（如 \`emal\` → 建议 \`email\`）
5. **返回格式**   
    - 给出${SugNum}条建议
**约束条件** 
    - 模糊匹配（如输入\`crea\` → 匹配\`created_at\`）
**示例**  
    用户输入：\`sh\`  
    AI输出：  
        \`\`\`  
            SHOW TABLES;
            SHOW DATABASES;
            SHUTDOWN IMMEDIATE;
        \`\`\` 
**用户输入** 
    -用户输入为\`${codeContent}\``.replace("\n", " ");
}

const solvePrompt = (codeContent: string, errorContent: string) => {
    // return `你是一个SQL教学助手, 请根据\`${codeContent}\`代码和\`${errorContent}\`日志提供解决方案, 使用中文回答, 只返回解决方案并禁止使用markdown语法`
    return `
**角色**：多数据库SQL专家，快速定位并修复错误
**处理流程**  
    1. **输入分析**  
        - 自动识别SQL或报错日志，提取关键信息（错误代码、行号、数据库类型）  
    2. **错误归类**  
        - 语法/对象/逻辑/性能/并发 五大类  
    3. **输出结构**  
        \`\`\`  
            [错误类型]  
            📍 问题定位：具体位置+错误本质  
            🛠️ 修复方案：  
            - 错误代码片段 → 修正后代码  
            - 多数据库兼容写法（如适用）  
            💡 原理：1句话解释根本原因  
            🚀 优化建议：索引/查询改写等（可选）  
        \`\`\`  
**交互规则**  
    信息不足时请根据已有的信息给出方案
**示例**  
    用户输入：\`SELECT * FORM users\`  
    AI输出：  
        \`\`\`  
            [语法错误]  
            📍 第1行关键词拼写错误  
            🛠️ 修复方案：  
            错误片段：\`FORM users\` → \`FROM users\`  
            💡 FROM指定数据源，FORM为无效关键词  
        \`\`\`  
---
当前用户输入:${codeContent}
错误日志显示:${errorContent}
`.replace("\n", " ");
}

export const getCodeSuggestions = async (codeContent: string, languageType: string = 'sql', sugNum: number = 3) => {
    const data = "";
    // 原始参数
    const message = codePrompt(codeContent, languageType, sugNum);
    const model = 'qwen-coder-turbo-latest';
    const maxTokens = 4096;
    const temperature = 0.6;

    // 对参数逐个编码
    const encodedMessage = encodeURIComponent(message);
    const encodedModel = encodeURIComponent(model);
    const encodedMaxTokens = encodeURIComponent(maxTokens);
    const encodedTemperature = encodeURIComponent(temperature);

    // 构建 URL
    const reqUrl = BASE_CHAT_URL + `/ai/model?message=${encodedMessage}&model=${encodedModel}&maxTokens=${encodedMaxTokens}&temperature=${encodedTemperature}`;
    const response = await fetch(reqUrl, {
        method: 'GET',
        headers: {
            'Content-Type': 'application/json;UTF-8',
            "Connection": "keep-alive",
            "Accept": "*/*",
            "Accept-Encoding": "gzip, deflate, br"
        },
    });
    if (!response.ok) {
        return data;
    }
    return response.text();
}

export const getSolveSuggestions = async (codeContent: string, errorContent: string) => {
    const data = "";
    // 原始参数
    const message = solvePrompt(codeContent, errorContent);
    const model = 'gpt-4o';
    const maxTokens = 4096;
    const temperature = 0.6;

    // 对参数逐个编码
    const encodedMessage = encodeURIComponent(message);
    const encodedModel = encodeURIComponent(model);
    const encodedMaxTokens = encodeURIComponent(maxTokens);
    const encodedTemperature = encodeURIComponent(temperature);

    // 构建 URL
    const reqUrl = BASE_CHAT_URL + `/ai/model?message=${encodedMessage}&model=${encodedModel}&maxTokens=${encodedMaxTokens}&temperature=${encodedTemperature}`;
    const response = await fetch(reqUrl, {
        method: 'GET',
        headers: {
            'Content-Type': 'application/json;UTF-8',
            "Connection": "keep-alive",
            "Accept": "*/*",
            "Accept-Encoding": "gzip, deflate, br"
        },
    });
    if (!response.ok) {
        return data;
    }
    return response.text();
}

const analysisPrompt = (question: string, userAnswer: string) => {
    return `
**角色**：多数据库SQL专家，分析题目错误原因，给出解析
**处理流程**  
    1. **输入分析**  
        - 根据题目内容和用户答案，分析错误原因
    2. **输出结构**   
        💡 解析：给出基本解析  
**交互规则**  
    信息不足时请根据已有的信息给出方案
**示例**  
    用户输入：\`在MySQL中，以下哪个SQL语句用于从表 students 中选择所有年龄大于20岁的学生记录？\`，\`SELECT * FROM students WHERE age > 20\`  
    AI输出：  
        💡 解析：给出基本解析 
---
题目内容:${question}
用户答案:${userAnswer}
`.replace("\n", " ");
}

export const getAnalysis = async (question: string, userAnswer: string) => {
    const data = "";
    // 原始参数
    const message = analysisPrompt(question, userAnswer);
    const model = 'gpt-4o';
    const maxTokens = 4096;
    const temperature = 0.6;

    // 对参数逐个编码
    const encodedMessage = encodeURIComponent(message);
    const encodedModel = encodeURIComponent(model);
    const encodedMaxTokens = encodeURIComponent(maxTokens);
    const encodedTemperature = encodeURIComponent(temperature);

    // 构建 URL
    const reqUrl = BASE_CHAT_URL + `/ai/model?message=${encodedMessage}&model=${encodedModel}&maxTokens=${encodedMaxTokens}&temperature=${encodedTemperature}`;
    const response = await fetch(reqUrl, {
        method: 'GET',
        headers: {
            'Content-Type': 'application/json;UTF-8',
            "Connection": "keep-alive",
            "Accept": "*/*",
            "Accept-Encoding": "gzip, deflate, br"
        },
    });
    if (!response.ok) {
        return data;
    }
    return response.text();
}


const generatePrompt = () => {
    return `
**角色**：多数据库SQL专家，根据文件内容给出相关题目，并给出选项、答案和解析
**处理流程**  
    1. **输入分析**  
        - 根据文件内容给出相关题目，并给出选项、答案和解析
    2. **输出结构** 
        - 题目
        - 选项
        - 答案
        - 解析
**交互规则**  
    信息不足时请根据已有的信息给出方案
**示例**  
    用户输入：\`在MySQL中，以下哪个SQL语句用于从表 students 中选择所有年龄大于20岁的学生记录？\`，\`SELECT * FROM students WHERE age > 20\`  
    AI输出：  
        - 题目：在MySQL中，以下哪个SQL语句用于从表 students 中选择所有年龄大于20岁的学生记录？
        - 选项：SELECT * FROM students WHERE age < 20
        - 选项：SELECT * FROM students WHERE age > 20 
        - 选项：SELECT * FROM students WHERE age = 20 
        - 选项：SELECT * FROM students WHERE age != 20
        - 答案：B
        - 解析：给出基本解析 
`.replace("\n", " ");
}

export const getGenerateProblem = async (file: File) => {
    const data = "";
    // 原始参数
    // const formData = new FormData()
    // formData.append('file', file)
    // const fileContent = await (await fetch(BASE_CHAT_URL + '/tools/tika/file', {
    //     method: 'POST',
    //     body: formData
    // })).text();
    // console.log(fileContent)
    const formDatafile = new FormData() 
    formDatafile.append('cover', file)
    const fileUrl = await (await uploadCourseCover(formDatafile)).data
    const message = generatePrompt()

    // 构建 URL
    const reqUrl = BASE_CHAT_URL + `/ai/image`;
    const formData = new FormData();
    formData.append('message', message);
    formData.append('imageUrl', fileUrl);
    

    const response = await fetch(reqUrl, {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json;UTF-8',
            "Connection": "keep-alive",
            "Accept": "*/*",
            "Accept-Encoding": "gzip, deflate, br"
        },
    });
    if (!response.ok) {
        return data;
    }
    return response.text();
}


